/**
 * Generate code from /{{projectName}}-core/src/main/java/{{packageName}}/{{apis}}/dto/{{apiDtos@DEFAULT}}.java.hbs
 */
package cn.ibizlab.api.dto;

import java.util.*;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.alibaba.fastjson.annotation.JSONField;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import cn.ibizlab.util.domain.DTOBase;
import cn.ibizlab.util.domain.DTOClient;
import lombok.*;
import lombok.experimental.Accessors;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * 认证接口[AuthLoginDTO]
 *
 * @author generator
 */
@Getter
@Setter
@NoArgsConstructor
@Accessors(chain = true)
@ApiModel("认证接口DTO")
public class AuthLoginDTO extends DTOBase implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 标识
     */
    @JsonProperty("id")
    @JSONField(name = "id")
    @ApiModelProperty(value = "标识", position = 0)
    private String id;

    /**
     * 登录名
     */
    @JsonProperty("login_name")
    @JSONField(name = "login_name")
    @ApiModelProperty(value = "登录名", position = 1)
    private String loginName;

    /**
     * 密码
     */
    @JsonProperty("password")
    @JSONField(name = "password")
    @ApiModelProperty(value = "密码", position = 2)
    private String password;

    /**
     * DC
     */
    @JsonProperty("dc")
    @JSONField(name = "dc")
    @ApiModelProperty(value = "DC", position = 3)
    private String dc;

    /**
     * token类型
     */
    @JsonProperty("token_type")
    @JSONField(name = "token_type")
    @ApiModelProperty(value = "token类型", position = 4)
    private String tokenType;

    /**
     * access_token
     */
    @JsonProperty("access_token")
    @JSONField(name = "access_token")
    @ApiModelProperty(value = "access_token", position = 5)
    private String accessToken;

    /**
     * token
     */
    @JsonProperty("token")
    @JSONField(name = "token")
    @ApiModelProperty(value = "token", position = 6)
    private String token;

    /**
     * 用户信息
     */
    @JsonProperty("user")
    @JSONField(name = "user")
    @ApiModelProperty(value = "用户信息", position = 7)
    private AuthInfoDTO user;

    /**
     * 范围
     */
    @JsonProperty("scope")
    @JSONField(name = "scope")
    @ApiModelProperty(value = "范围", position = 8)
    private String scope;

    /**
     * token_id
     */
    @JsonProperty("token_id")
    @JSONField(name = "token_id")
    @ApiModelProperty(value = "token_id", position = 9)
    private String tokenId;

    /**
     * 过期时间
     */
    @JsonProperty("expiration")
    @JSONField(name = "expiration")
    @JsonSerialize(using = ToStringSerializer.class)
    @ApiModelProperty(value = "过期时间", position = 10)
    private Long expiration;

    /**
     * 过期剩余秒数
     */
    @JsonProperty("expires_in")
    @JSONField(name = "expires_in")
    @ApiModelProperty(value = "过期剩余秒数", position = 11)
    private Integer expiresIn;

    /**
     * refresh_token
     */
    @JsonProperty("refresh_token")
    @JSONField(name = "refresh_token")
    @ApiModelProperty(value = "refresh_token", position = 12)
    private String refreshToken;

    /**
     * 验证码标识
     */
    @JsonProperty("state")
    @JSONField(name = "state")
    @ApiModelProperty(value = "验证码标识", position = 13)
    private String state;

    /**
     * 验证码
     */
    @JsonProperty("code")
    @JSONField(name = "code")
    @ApiModelProperty(value = "验证码", position = 14)
    private String code;

    /**
     * 变更的新密码
     */
    @JsonProperty("new_password")
    @JSONField(name = "new_password")
    @ApiModelProperty(value = "变更的新密码", position = 15)
    private String newPassword;

    /**
     * 手机号
     */
    @JsonProperty("phone")
    @JSONField(name = "phone")
    @ApiModelProperty(value = "手机号", position = 16)
    private String phone;

    /**
     * 验证码图片
     */
    @JsonProperty("image")
    @JSONField(name = "image")
    @ApiModelProperty(value = "验证码图片", position = 17)
    private String image;

    /**
     * 登录类型
     */
    @JsonProperty("login_type")
    @JSONField(name = "login_type")
    @ApiModelProperty(value = "登录类型", position = 18)
    private String loginType;

    /**
     * 名称
     */
    @JsonProperty("display_name")
    @JSONField(name = "display_name")
    @ApiModelProperty(value = "名称", position = 19)
    private String displayName;


    /**
     * 设置 [登录名]
     */
    public AuthLoginDTO setLoginName(String loginName) {
        this.loginName = loginName;
        this.modify("login_name", loginName);
        return this;
    }

    /**
     * 设置 [密码]
     */
    public AuthLoginDTO setPassword(String password) {
        this.password = password;
        this.modify("password", password);
        return this;
    }

    /**
     * 设置 [DC]
     */
    public AuthLoginDTO setDc(String dc) {
        this.dc = dc;
        this.modify("dc", dc);
        return this;
    }

    /**
     * 设置 [token类型]
     */
    public AuthLoginDTO setTokenType(String tokenType) {
        this.tokenType = tokenType;
        this.modify("token_type", tokenType);
        return this;
    }

    /**
     * 设置 [access_token]
     */
    public AuthLoginDTO setAccessToken(String accessToken) {
        this.accessToken = accessToken;
        this.modify("access_token", accessToken);
        return this;
    }

    /**
     * 设置 [token]
     */
    public AuthLoginDTO setToken(String token) {
        this.token = token;
        this.modify("token", token);
        return this;
    }

    /**
     * 设置 [用户信息]
     */
    public AuthLoginDTO setUser(AuthInfoDTO user) {
        this.user = user;
        this.modify("user", user);
        return this;
    }

    /**
     * 设置 [范围]
     */
    public AuthLoginDTO setScope(String scope) {
        this.scope = scope;
        this.modify("scope", scope);
        return this;
    }

    /**
     * 设置 [token_id]
     */
    public AuthLoginDTO setTokenId(String tokenId) {
        this.tokenId = tokenId;
        this.modify("token_id", tokenId);
        return this;
    }

    /**
     * 设置 [过期时间]
     */
    public AuthLoginDTO setExpiration(Long expiration) {
        this.expiration = expiration;
        this.modify("expiration", expiration);
        return this;
    }

    /**
     * 设置 [过期剩余秒数]
     */
    public AuthLoginDTO setExpiresIn(Integer expiresIn) {
        this.expiresIn = expiresIn;
        this.modify("expires_in", expiresIn);
        return this;
    }

    /**
     * 设置 [refresh_token]
     */
    public AuthLoginDTO setRefreshToken(String refreshToken) {
        this.refreshToken = refreshToken;
        this.modify("refresh_token", refreshToken);
        return this;
    }

    /**
     * 设置 [验证码标识]
     */
    public AuthLoginDTO setState(String state) {
        this.state = state;
        this.modify("state", state);
        return this;
    }

    /**
     * 设置 [验证码]
     */
    public AuthLoginDTO setCode(String code) {
        this.code = code;
        this.modify("code", code);
        return this;
    }

    /**
     * 设置 [变更的新密码]
     */
    public AuthLoginDTO setNewPassword(String newPassword) {
        this.newPassword = newPassword;
        this.modify("new_password", newPassword);
        return this;
    }

    /**
     * 设置 [手机号]
     */
    public AuthLoginDTO setPhone(String phone) {
        this.phone = phone;
        this.modify("phone", phone);
        return this;
    }

    /**
     * 设置 [验证码图片]
     */
    public AuthLoginDTO setImage(String image) {
        this.image = image;
        this.modify("image", image);
        return this;
    }

    /**
     * 设置 [登录类型]
     */
    public AuthLoginDTO setLoginType(String loginType) {
        this.loginType = loginType;
        this.modify("login_type", loginType);
        return this;
    }

    /**
     * 设置 [名称]
     */
    public AuthLoginDTO setDisplayName(String displayName) {
        this.displayName = displayName;
        this.modify("display_name", displayName);
        return this;
    }


}
